package es.duma.presentation;

import es.duma.util.log.Log;

import java.io.UnsupportedEncodingException;

import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.ListIterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Gestiona las peticiones http get efectuadas por los usuarios a la herramienta
 */
public class RequestManager {

    /**
     * Nombre para mostrar en los mensajes de log
     */
    public static final String NAME_LOG="[RequestMng]";
    
    /**
     * Valor del atributo user-agent capturado de la peticion http y que se utiliza para identificar el 
     * terminal del usuario
     */
    public static final String USER_AGENT="USER-AGENT";
  
    /**
     * Extrae los parametros de un HttpServletRequest y los escribe en un Hashtable
     * @param request parametros de la pericion
     * @return tabla hash con los parametros recogidos
     */
    public static Hashtable getParams(HttpServletRequest request) {
        Hashtable params = null;
        String p_name = "";
        String p_value = "";
        String p_key= "";


        params = new Hashtable();
        Enumeration names = request.getParameterNames();
        Log.debug(NAME_LOG+" Obteniendo los parametros de la peticion....");


        while (names.hasMoreElements()) {
            p_name = (String)names.nextElement();
            p_value = request.getParameter(p_name);
            Log.debug(NAME_LOG+" Obtenido parametro: <"+p_name+"> => "+p_value);
            params.put(p_name,p_value);
        }
        
        return params;
    }
    
    
    /**
     * Retorna la sesion de usuario
     * @param request sesion del usaurio (HttpSession)
     * @return
     */
    public static HttpSession getSession(HttpServletRequest request) {
        HttpSession session = null;
        String id_session = null;
        
        session = request.getSession();
        id_session = session.getId();
        try{
            Log.debug(NAME_LOG+" fecha ultimo acceso"+new Date(session.getLastAccessedTime()));
        }catch(Exception e){
            Log.debug(NAME_LOG+" Sesion no valida "+e);
            session=null;
        }
      
        Log.debug(NAME_LOG + id_session + "es el identificador de la sesion para '" +request.getRequestURI() + "'.");

        return session;
    }
    
    
    /**
     * Obtiene las cabeceras de la peticion http
     * @param request
     * @return
     */
    public static Hashtable getHeaders(HttpServletRequest request){
        Enumeration e =request.getHeaderNames();
        
        Hashtable headers=new Hashtable();
        while (e.hasMoreElements()){
            String p_name = (String)e.nextElement();
            String p_value = (String)request.getHeader(p_name);
            Log.debug(NAME_LOG+" Extrayendo Header: "+p_name+" valor: "+p_value);
            headers.put(p_name,p_value);
        }
        
        return headers;
    }
    
    
    
    /**
     * Devuelve el valor del user-agent capturado en la peticion
     * @param request
     * @return
     */
    public static String getUserAgent(HttpServletRequest request){
        Hashtable headers;
        // Se solicita los headers de la peticion http
        headers=getHeaders(request);
        String user_agent="Default";
        
        if (headers.get(USER_AGENT)!=null)
            user_agent = (String)headers.get(USER_AGENT);
            
        Log.debug(NAME_LOG+" Agente de usuario detectado "+user_agent);
        return user_agent;
              
        
    }

}
